﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dominio;
using Persistencia;

namespace PersistenciaImplementacion
{
    class BrokerTareaMantenimiento : Broker
    {
        public override string GetSQLCreate()
        {
            return "INSERT INTO TareaMantenimiento (fecha, idTanque) VALUES (@fecha,@idTanque)SELECT SCOPE_IDENTITY()"; 
        }

        public override string GetSQLDelete()
        {
            return null;
        }

        public override string GetSQLUpdate()
        {
            return null;
        }

        public override string GetSQLSelect()
        {
            return "select * from TareaMantenimiento tm " +
                    " left join TareaMantenimientoLimpieza tml on tm.idTareaMantenimiento = tml.idLimpieza" +
                    " left join TareaMantenimientoReposicion tmr on tm.idTareaMantenimiento = tmr.idReposicion" +
                    " left join TareaMantenimientoTratamiento tmt on tm.idTareaMantenimiento = tmt.idTratamiento";
        }

        public override ObjetoPersistible ReaderToObject(System.Data.Common.DbDataReader reader)
        {
            int idTareaMantenimiento = Int32.Parse(reader["idTareaMantenimiento"].ToString());
            DateTime fecha = DateTime.Parse(reader["fecha"].ToString());
            int idTanque = Int32.Parse(reader["idTanque"].ToString());

            if (reader["idLimpieza"].ToString() != "")
            { //Tarea de Limpieza
                TareaMantenimiento tarea = new Limpieza();
                tarea.FechaHora = fecha;
                tarea.IdMantenimiento = idTareaMantenimiento;
                tarea.AgregarTanque(idTanque, tarea);
                return tarea;
            }
            else if (reader["idReposicion"].ToString() != "")
            { //Tarea de Reposicion
                int litros = Int32.Parse(reader["litros"].ToString());
                int idReposicionManual = Int32.Parse(reader["idReposicionManual"].ToString());
                TareaMantenimiento tarea = new Reposicion(litros, idReposicionManual, fecha);
                tarea.FechaHora = fecha;
                tarea.IdMantenimiento = idTareaMantenimiento;
                tarea.AgregarTanque(idTanque, tarea);
                return tarea;
            }
            else if (reader["idTratamiento"].ToString() != "")
            { //Tarea de Tratamiento
                TareaMantenimiento tarea = new Tratamiento();
                tarea.FechaHora = fecha;
                tarea.IdMantenimiento = idTareaMantenimiento;
                tarea.AgregarTanque(idTanque, tarea);
                return tarea;
            }
            return null;
        }

        public override void LoadReferences(SqlCommand comando, ObjetoPersistible obj)
        {
            String fechaPrueba = (obj as TareaMantenimiento).FechaHora.ToString();
            SqlParameter fecha = new SqlParameter("@fecha", SqlDbType.DateTime);
            fecha.Value = (obj as TareaMantenimiento).FechaHora.ToUniversalTime();
            SqlParameter idTanque = new SqlParameter("@idTanque", (obj as TareaMantenimiento).Tanque.idTanque);
            comando.Parameters.Add(fecha);
            comando.Parameters.Add(idTanque);
        }

        public override void LoadReferencesWhere(SqlCommand comando, ObjetoPersistible obj)
        {
            
        }

        public override string InsertarHijos(object objeto, ObjetoPersistible obj)
        {
            TareaMantenimiento tarea = (TareaMantenimiento)obj;
            tarea.IdMantenimiento = Int32.Parse(objeto.ToString());

            if (obj is Reposicion)
            {
                return "INSERT INTO TareaMantenimientoReposicion (idReposicion,litros,idReposicionManual) VALUES (" + tarea.IdMantenimiento + ",'" + (obj as Reposicion).Litros + "','" + (obj as Reposicion).IdReposicion + "')";
            }
            else if (obj is Tratamiento)
            {
                return "INSERT INTO TareaMantenimientoTratamiento (idTratamiento) VALUES (" + tarea.IdMantenimiento + ")";
            }
            else if (obj is Limpieza)
            {
                return "INSERT INTO TareaMantenimientoLimpieza (idLimpieza) VALUES (" + tarea.IdMantenimiento + ")";
            }
            return null;
        }
    }
}
